#pragma once

#include <ntddk.h>

class CBase
{
public:
    CBase();
    ~CBase();

    PVOID operator new(size_t qwSize, POOL_FLAGS fPoolFlags, ULONG dwTag);
    VOID operator delete(PVOID pBuffer);
    
    VOID PrintClassName();
    virtual VOID TellSomething();
     
};

class CDerived : public CBase
{
public:
    CDerived();
    ~CDerived();

    PVOID operator new(SIZE_T qwSize, POOL_FLAGS fPoolFlags, ULONG dwTag);
    VOID operator delete(PVOID pBuffer);

    VOID PrintClassName();
    virtual VOID TellSomething() override;

};